import pandas as pd
import os
from datetime import datetime, timedelta

def query_by_date(start_date_input, end_date_input):

    try:
        # 转换输入的日期字符串为日期对象
        start_date = datetime.strptime(start_date_input, '%Y-%m-%d').date()
        end_date = datetime.strptime(end_date_input, '%Y-%m-%d').date()
    except ValueError:
        print("日期格式错误，请使用YYYY-MM-DD格式")
        return

    # 确保结束日期不早于开始日期
    if end_date < start_date:
        print("错误：结束日期不能早于开始日期")
        return

    # 准备汇总数据
    all_data = []
    missing_files = []
    current_date = start_date

    print(f"\n开始汇总 {start_date} 至 {end_date} 的数据...")

    # 遍历日期范围内的每一天
    while current_date <= end_date:
        # 生成文件名
        file_date = current_date.strftime('%Y_%m_%d')
        filename = f"query_data_{file_date}.xlsx"

        # 检查文件是否存在
        if os.path.exists(filename):
            try:
                # 读取Excel文件（不添加任何额外列）
                df = pd.read_excel(filename, engine='openpyxl')
                all_data.append(df)
                print(f"已添加: {filename}")
            except Exception as e:
                print(f"读取 {filename} 时出错: {str(e)}")
                missing_files.append(filename)
        else:
            print(f"文件不存在: {filename}")
            missing_files.append(filename)

        # 移动到下一天
        current_date += timedelta(days=1)

    # 检查是否找到数据
    if not all_data:
        print("\n未找到任何有效数据文件")
        return False

    # 合并所有数据（按时间顺序）
    combined_df = pd.concat(all_data, ignore_index=True)

    # 保存汇总结果
    output_file = "../statics/query_data.xlsx"

    # 先删除已存在的文件（如果存在）
    if os.path.exists(output_file):
        try:
            os.remove(output_file)
            print(f"已删除原有文件: {output_file}")
        except Exception as e:
            print(f"删除文件时出错: {e}")
            return False

    # 写入新文件
    combined_df.to_excel(output_file, index=False, engine='openpyxl')

    # 判断新文件是否生成
    if os.path.exists(output_file):
        print("新文件写入成功")
        return True
    else:
        print("新文件写入失败")
        return False



